#include	<stdio.h>
#include    <stdlib.h>
#include    <string.h>
#include	<sys/types.h>
#include	<sys/stat.h>
#include	<dirent.h>

ino_t	get_inode(char *);
void    printpathto(ino_t);
void    inum_to_name(ino_t , char *, int );

int main()
{
	printpathto( get_inode( "." ) );	
	putchar('\n');			
	return 0;
	}
void printpathto( ino_t this_inode )
	{
	ino_t	my_inode ;
	char	its_name[BUFSIZ];
	if ( get_inode("..") != this_inode )		
	{						
	chdir( ".." );				
	inum_to_name(this_inode,its_name,BUFSIZ);
	my_inode = get_inode( "." );			
	printpathto( my_inode );			
	printf("/%s", its_name );				}						
	}
void inum_to_name(ino_t inode_to_find , char *namebuf, int buflen)
{								DIR		*dir_ptr;		
	struct dirent	*direntp;				dir_ptr = opendir( "." );				if ( dir_ptr == NULL ){				
	perror( "." );	
	exit(1);
	}
	while ( ( direntp = readdir( dir_ptr ) ) != NULL 	  if ( direntp->d_ino == inode_to_find )
							
strncpy( namebuf, direntp->d_name, buflen);
namebuf[buflen-1] = '\0';   
closedir( dir_ptr );
return;
fprintf(stderr, "error looking for inum %d\n", (int) inode_to_find);
exit(1);

}
ino_t get_inode( char *fname )
{
struct stat info;
if ( stat( fname , &info ) == -1 ){
fprintf(stderr, "Cannot stat ");
perror(fname);
exit(1);
}
return info.st_ino;
}
